package com.woniu.cq.medical.service.impl;

import com.woniu.cq.medical.controller.form.CaseForm;
import com.woniu.cq.medical.dao.CaseChangeInfoMapper;
import com.woniu.cq.medical.dao.mymapper.My_CaseMapper;
import com.woniu.cq.medical.dao.mymapper.My_PatientMapper;
import com.woniu.cq.medical.entity.Case;
import com.woniu.cq.medical.dao.CaseMapper;
import com.woniu.cq.medical.entity.CaseChangeInfo;
import com.woniu.cq.medical.entity.Patient;
import com.woniu.cq.medical.service.CaseService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author Lucas
 * @since 2020-09-05
 */
@Service
public class CaseServiceImpl extends ServiceImpl<CaseMapper, Case> implements CaseService {
    @Autowired
    private My_CaseMapper myCaseMapper;
    @Autowired
    private My_PatientMapper myPatientMapper;
    @Autowired
    private CaseChangeInfoMapper caseChangeInfoMapper;

    /**
     * 根据身份证查询病例
     * @param idCard 身份证
     * @param flag 是否归档 归档（true） 未归档（false）
     * @return 病例
     */
    @Override
    public Case selectCaseByIdCard(String idCard, boolean flag) {
        //判断flag  true==查询已归档
        if (flag){
            return myCaseMapper.selectIsPigeonholeCaseByIdCard(idCard);
        }
        //false==查询未归档
        return myCaseMapper.selectNotPigeonholeCaseByIdCard(idCard);
    }

    /**
     * 更新病例
     * 如果之前所有病例均已更新 则进行新增操作
     * 如果之前已经有没归档的病例 则将此病例进行更新
     * @param caseForm
     */
    @Override
    public void updadeCase(CaseForm caseForm) throws ParseException {
        //根据患者的身份证，查询出对应的患者ID
        Patient patient = myPatientMapper.selectPatientByIdCard(caseForm.getCasePatientIdCard());
        Integer patientId = patient.getPatientId();
        //获取当前时间
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String nowTime = dateFormat.format(new Date());
        DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate now = LocalDate.parse(nowTime, fmt);

        SimpleDateFormat d = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String time = d.format(new Date());
        //将当前时间和患者ID设置进caseForm
        caseForm.setUserId(patientId);
        caseForm.setCaseFinalUpdateDate(now);

        //查询当前患者是否有未归档的病例
        Case aCase = myCaseMapper.selectNotPigeonholeCaseByIdCard(caseForm.getCasePatientIdCard());
        //定义一个变量 用于储存病例ID
        Integer caseId=-1;

        //如果查询结果不为空，执行更新操作
        if (aCase!=null){
            caseId = aCase.getCaseId();
            BeanUtils.copyProperties(caseForm,aCase);
            aCase.setCaseId(caseId);
            myCaseMapper.updateById(aCase);

            //新增病例信息修改记录表 （不管病历表是做新增操作还是修改操作，病例信息修改记录表均为新增）
            CaseChangeInfo caseChangeInfo = new CaseChangeInfo();
            BeanUtils.copyProperties(caseForm,caseChangeInfo);
            caseChangeInfo.setCaseId(caseId);
            caseChangeInfo.setCaseFinalUpdateDate(time);
            caseChangeInfoMapper.insert(caseChangeInfo);
            return;
        }
        // 如果查询结果为空 执行新增操作
        aCase = new Case();
        BeanUtils.copyProperties(caseForm,aCase);
        myCaseMapper.insert(aCase);
        caseId = aCase.getCaseId();
        //新增病例信息修改记录表 （不管病历表是做新增操作还是修改操作，病例信息修改记录表均为新增）
        CaseChangeInfo caseChangeInfo = new CaseChangeInfo();
        BeanUtils.copyProperties(caseForm,caseChangeInfo);
        caseChangeInfo.setCaseId(caseId);
        caseChangeInfo.setCaseFinalUpdateDate(time);
        caseChangeInfoMapper.insert(caseChangeInfo);

    }

    /**
     * 根据身份证和病历号查询病人的病例修改记录   如果caseID为空的字符串  则只使用  idCard 作为条件查询
     * @param idCard
     * @return
     */
    @Override
    public List<Case> selectCaseListByIdCard(String idCard, String caseID) {
        if (caseID.equals("")){
            List<Case> cases = myCaseMapper.selectIsPigeonholeCaseListByIdCard(idCard);
            return cases;
        }
        List<Case> cases = myCaseMapper.selectIsPigeonholeCaseListByIdCardAndCaseID(idCard, caseID);
        return cases;
    }


}
